package com.hb.B_面向对象.J_lambda和集合.A_lambda简化表达


/**
 * 这两个方法的最大的作用就是可以让我们在写Lambda的时候，省略多次书写的对象名，
 * 默认使用this关键字来指向他。
 *  public inline fun <T, R> with(receiver: T, block: T.() -> R): R
 *  可以看出，with函数的第一个参数为接收者类型，然后通过第二个参数创建这个类型的block
 *  方法时。因此在该接收者对象调用block方法时，可以在lambda中直接用this来代表这个对象。
 *
 *  public inline fun <T> T.apply(block: T.() -> Unit): T
 * */
fun main() {
    //with
    val user= User("Java",18);
    val result = with(user, {
        println("my name is $name, I am $age years old")
        1000
    })
    println(result)
}